#ifndef MD5_H
#define MD5_H

#include <stdint.h>
#include <stddef.h>
#include <signal.h>

#define MD5_HASH_LENGTH 32

// 全局变量声明，定义在 main.c 中
extern volatile sig_atomic_t g_shutdown_requested;

typedef struct {
    uint32_t state[4];
    uint64_t bitcount;
    uint8_t buffer[64];
} MD5Context;

/**
 * 计算文件的MD5哈希值
 * @param filepath 文件路径
 * @param hash_output 输出的32字符哈希值（需要33字节空间包含'\0'）
 * @return 0表示成功，-1表示失败，-2表示被中断
 */
int calculate_md5(const char *filepath, char *hash_output);

#endif // MD5_H
